package com.shoy.myapp.base;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.shoy.myapp.R;
import com.shoy.myapp.app.AppContext;
import com.shoy.myapp.app.Constants;
import com.shoy.myapp.bean.DTO;
import com.shoy.myapp.common.DialogHelper;

import java.io.Serializable;

/**
 * 基础通知操作类
 *
 * @author shay
 * @created 2015/04/03
 */
public class Operation {
    //组件意图
    private Intent mIntent = new Intent();
    //当前上下文
    private Activity mContext = null;
    //应用程序
    private AppContext mApplication = null;

    public Operation(Activity context) {
        mContext = context;
        mApplication = (AppContext) this.mContext.getApplicationContext();
    }

    /**
     * 跳转Activity
     */
    public void forward(Class<? extends Activity> activity) {
        mIntent.setClass(mContext, activity);
        mContext.startActivity(mIntent);
        mContext.overridePendingTransition(R.anim.base_slide_right_in, R.anim.base_slide_remain);
    }

    /**
     * 设置传递参数
     *
     * @param value 数据传输对象
     */
    public void add(DTO value) {
        mIntent.putExtra(Constants.ACTIVITY_DTO_KEY, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void add(String key, DTO value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void add(String key, Bundle value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void add(String key, Serializable value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void add(String key, String value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 获取跳转时设置的参数
     *
     * @param key key
     * @return value
     */
    public <T> T get(String key) {
        Object value = mContext.getIntent().getExtras().get(key);
        return (T) value;
    }

    /**
     * 获取跳转参数集合
     *
     * @return DTO
     */
    public DTO get() {
        return (DTO) mContext.getIntent().getExtras().getSerializable(Constants.ACTIVITY_DTO_KEY);
    }

    /**
     * 设置全局传递参数
     *
     * @param key   键
     * @param value 值
     */
    public void setGloable(String key, Object value) {
        mApplication.setData(key, value);
    }

    /**
     * 获取全局传递参数
     *
     * @param key 键
     * @return Object对象值
     */
    public Object getGlobal(String key) {
        return getGlobal(key, true);
    }

    /**
     * 获取全局传递参数
     *
     * @param key    键
     * @param remove 是否移除
     * @return Object对象值
     */
    public Object getGlobal(String key, boolean remove) {
        Object value = mApplication.getData(key);
        if (remove) {
            mApplication.removeData(key);
        }
        return value;
    }

    /**
     * 弹出等待对话框
     *
     * @param message 提示信息
     */
    public void showLoading(String message) {
        DialogHelper.loading(mContext, message);
    }

    /**
     * 弹出等待对话框
     *
     * @param message  提示信息
     * @param listener 按键监听器
     */
    public void showLoading(String message, DialogHelper.ILoadingOnKeyListener listener) {
        DialogHelper.loading(mContext, message, listener);
    }

    /**
     * 更新等待对话框显示文本
     *
     * @param message 需要更新的文本内容
     */
    public void updateLoadingText(String message) {
        DialogHelper.updateProgressText(message);
    }

    /**
     * 关闭等待对话框
     */
    public void closeLoading() {
        DialogHelper.closeLoading();
    }
}
